加密與雜湊的差異


Posted by fang on 2020-09-20

我記得幾個月前,有一個老師在 facebook 發文,問她有沒有人可以跟他解釋一下加密跟雜湊有什麼不同,這兩者之間是什麼關係,那時候我曾經聽過這兩個名詞,但是還似懂非懂,所以就上網查查資料,查的過程中也有人已經回應老師,我也沒有多想探討些什麼,就是默默地了解答案,當時有人貼了一個漫畫版,在這裡。如今我比當初更了解加密跟雜湊是什麼東西,所以就筆記在這邊摟~

加密有一個相反詞,叫做解密,所以加解密是一個雙向的動作,你如果把資料做加密,我只要有一把鑰匙可以對資料做解密,我就可以看到資料的原貌。這邊又會牽者到中間人攻擊的資安問題,以及後續衍伸出來的公鑰私鑰的方法,這邊著重在雜湊與加密兩者之間的差異,就不多說這一塊。

而雜湊是沒有鑰匙的,如果我把資料做雜湊,是很難從一串雜湊值亂碼知道我的資料原貌是怎麼樣的,所以可以拿來作身份驗證,就是因為沒有鑰匙,如果駭客不知道我用什麼雜湊函數,他是不可能盜用我的密碼的。另外,雜湊有一個特性讓他更適用於身份驗證,當我把一個字串進行雜湊,做一百遍一樣的步驟獲得的雜湊值都會是一樣的。

在這邊我覺得有兩件事情可以說明,有人說雜湊就是資料的身分證,我不這麼去想它,在幾億分之一的可能下,將會有不同的資料獲得相同的雜湊值,那當 A 跟 B 的密碼不同卻獲得同樣的雜湊值會不會影響到資安問題,其實是很難的,因為身份驗證其實只是需要把你輸入的密碼轉換成雜湊值,再把它對應到資料庫存取的雜湊值看看一不一樣這樣就好了,通常身份驗證都會做次數限制,是很難讓你測試別人的密碼到成功的。

另一件事情就是如果你想盜用 B 的帳號,首先你必須知道 B 的帳號,再來你必須知道該系統是使用哪一種雜湊函數,如果你真的都知道了,想要使用彩虹表來破解密碼,系統可能還有使用加鹽來做防範。

加鹽就是在密碼中加調味料,先把密碼加入一些值,再進行雜湊,儘管你嘗試了所有著名的雜湊函數,你也很難知道該系統是怎麼進行加鹽的,如此一來,目前應該不太有人可以突破這道防線了吧!

今天是偏心了,雜湊的部分寫得比較多,做一個總結,加密跟雜湊最大的不同在於雜湊不可逆,加密可逆,其用途也大大的不同,這也是為什麼存在資料庫裡不要存明碼,也不要用加密,最好是使用雜湊,因為資安的問題,我們還是要努力避免資料庫被駭客入侵的!

所以如果有人問說:雜湊是加密的一種嗎?痾...不系。


#加密 #雜湊







Related Posts

How to solve the perpetual loading issue in Evernote? Evernote 一直轉圈圈的解決辦法

How to solve the perpetual loading issue in Evernote? Evernote 一直轉圈圈的解決辦法

Deep Learning on 3D object detection paper 閱讀路徑

Deep Learning on 3D object detection paper 閱讀路徑

.Net MVC authorization Controller and Workcontext extension in razor view

.Net MVC authorization Controller and Workcontext extension in razor view


Comments